# 导入配置加载器和模型管理器模块
from config_loader import ConfigLoader
from model_manager import ModelManager

"""
模块化设计原则
（1）高内聚低耦合：每个模块专注单一功能
（2）分层架构：数据流明确（输入→处理→输出）
（3）可扩展性：新功能通过新增模块实现

模块化开发优势
（1）独立调试：每个模块可单独测试
（2）团队协作：不同开发者负责不同模块
（3）版本管理：模块可独立升级
"""


# AI服务类，用于处理文本请求并返回预测结果
class AIService:
    # 初始化方法，加载配置并实例化模型管理器
    def __init__(self):
        self.config = ConfigLoader.load_config()
        self.model = ModelManager(self.config)

    # 处理输入文本请求的方法
    def process_request(self, input_text):
        # 使用模型进行预测
        raw_result = self.model.predict(input_text)
        # 格式化并返回结果
        return self._format_result(raw_result)

    # 私有方法，用于格式化模型预测结果
    def _format_result(self, result):
        # 单下划线开头的方法表示这是一个"受保护"的方法
        # 虽然Python中单下划线方法仍可以被外部访问，但这是一个约定，表示该方法仅供类内部使用
        return {"status": "success", "data": result}

    # def __format_result(self, result):
    #     # 双下划线开头的方法会触发Python的名称改写(Name Mangling)机制
    #     # 实际的方法名会变成 _类名__方法名，这样可以避免子类意外覆盖父类的方法
    #     # 这个方法演示了双下划线的用法，实际代码中通常使用单下划线即可
    #     return {"status": "success", "data": result}


# 主程序入口
if __name__ == "__main__":
    # 创建AI服务实例
    service = AIService()
    # 处理示例文本并打印结果
    # 这里我们是进行情感分析预测，也就是分类这个文本是积极的还是消极的
    output = service.process_request("This movie is fantastic!")
    print(output)
    output = service.process_request("I hate this product!")
    print(output)
